## 导入日志模块
import logging

from DrissionPage import Chromium, ChromiumOptions
from pypinyin import lazy_pinyin
import re
import requests
import os
import shutil

from database import get_db_session, model_to_dict

# 配置日志系统的信息
logging.basicConfig(
    level=logging.INFO, format="%(asctime)s [%(levelname)s] %(message)s"
)


# 定义获取日志记录器的函数，参数的name指定日志记录器的名称
def get_logger(name):
    return logging.getLogger(name)


logger = get_logger(__name__)

# 创建配置对象
co = ChromiumOptions()
# 根据配置对象创建浏览器实例，它会打开浏览器
browser = Chromium(co)


def safe_filename(idx, title, ext):
    # 先把汉字转拼音
    pin_yin_title = "".join(lazy_pinyin(title))
    name = re.sub(r"[^\w]", "_", pin_yin_title)  # \w 代表 中英文 数字 下划线
    # 限制文件名最长为50个字符
    name = name[:50]
    return f"{idx}_{name}{ext}"


# 创建一个requests会话对象，用于复用连接
session = requests.Session()


def remove_dir_content(folder_path):
    if not os.path.exists(folder_path):
        logger.info(f"{folder_path}文件夹不存在")
        return
    try:
        for item in os.listdir(folder_path):
            item_path = os.path.join(folder_path, item)
            if os.path.isfile(item_path):
                os.remove(item_path)  # 删除文件
            elif os.path.isdir(item_path):
                shutil.rmtree(item_path)  # 递归删除子文件夹
        print(f"成功清空文件夹: {folder_path}")
    except Exception as e:
        logger.error((f"错误：无法清空文件夹: {e}"))


def insert_data(target, data):
    with get_db_session() as session:
        item = target(**data)
        session.add(item)
        session.flush()
        return model_to_dict(item)
